package com.dican.portal.pedidos;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.mail.*;
import javax.mail.internet.*;
import com.dican.portal.beans.Email;
import com.dican.portal.beans.Pedido;
import com.dican.portal.beans.Produto;

import java.text.NumberFormat;
import java.util.Date;
import java.util.Properties;
public class EnviaMail extends HttpServlet {
	private static final long serialVersionUID = 1L;
    
    public EnviaMail() {
        super();
    }
    
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request,response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		Properties properties = new Properties();
        properties.put("mail.smtp.host", "smtp.gmail.com");
        properties.put("mail.smtp.port", 25);
        properties.put("mail.smtp.auth", "true");
        properties.put("mail.smtp.starttls.enable", "true");
        
        Authenticator auth = new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("admin@dican.com.br", "inmail01");
            }
        };
        
        Session session = Session.getInstance(properties, auth);
        
		Message msg = new MimeMessage(session);
		
		HttpSession sessao = request.getSession();
		Pedido pedido = (Pedido) sessao.getAttribute("pedido");
		Email email = new Email();
		email.setAssunto("Pedido "+pedido.getNumero()+" - Representante "+pedido.getRepresentante().getNome());
		
		String texto = "";
		String itens = "";
		String rodape = "";
		texto = texto + "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>";
		texto = texto + "<html style='page-break-after: always;'>";
		texto = texto +  "<head>";
		texto = texto +  "<title>Pedido</title>";
		texto = texto +  "<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>";
		texto = texto +  "<link href='includes/estilo.css' rel='stylesheet' type='text/css'>";
		texto = texto +  "<style type='text/css'>";
		texto = texto +  "<!--";
		texto = texto +  ".style11 {font-size: 11px; font-weight: bold; }";
		texto = texto +  "-->";
		texto = texto +  "</style>";
		texto = texto +  "</head>";
		texto = texto +  "<body>";
		
		texto = texto +  "<table border='0' align='center' cellpadding='0' cellspacing='0' width='770px'>";
		texto = texto +  "<tr>";
		texto = texto +  "<td height='100px'>";
		texto = texto +  "<table border='0' align='center' cellpadding='0' cellspacing='0' width='100%'>";
		texto = texto +  "<tr>";
		texto = texto + 	"<td align='center' width='100px'> <font color='#191970' size='1'>" + new Date() + "</font></td>";
		texto = texto +  	"<td width='30px'></td>";
		texto = texto + 	"<td><center><font color='blue' size='4'><b>" + pedido.getCliente().getNome() + "</b><br>CNPJ: " + pedido.getCliente().getCnpj() + "</font></center></td>";
		texto = texto +  	"<td align='center' width='130px'> <font color='#FF000000'><b>" + pedido.getRepresentante().getOrgNome() + "</b></font> </td>";
		texto = texto +  "</tr>";
		texto = texto +  "</table>";
		texto = texto +  "</td>";
		texto = texto +  "</tr>";
		texto = texto +  "<tr>";
		texto = texto +  	"<td><hr color=navy size=3></td>";
		texto = texto +  "</tr>";
		texto = texto +  "<tr>";
		texto = texto +  "<td>";
		
		texto = texto +  "<table cellpadding='0' cellspacing='0' width='770px' style='border-bottom: solid 2px black;'>";
		texto = texto +  "<tr bgcolor='#696969' height='30px'>";
		texto = texto +  "	<td align='center' style='border-bottom: solid 2px black;'><font color='#FFFFFF' size='2'><b>C&oacute;digo</b></font></td>";
		texto = texto +  "	<td align='left' style='border-bottom: solid 2px black;' colspan='2'><font color='#FFFFFF' size='2'><b>Descri&ccedil;&atilde;o</b></font></td>";
		texto = texto +  "	<td align='center' align='left' style='border-bottom: solid 2px black;'><font color='#FFFFFF' size='2'><b>Qtde<b></font></td>";
		texto = texto +  "	<td align='right' style='border-bottom: solid 2px black;'><font color='#FFFFFF' size='2'><b>Vl. Unit.<b></font></td>";
		texto = texto +  "	<td align='right' style='border-bottom: solid 2px black;'><font color='#FFFFFF' size='2'><b>Desc.<b></font></td>";
		texto = texto +  "	<td align='right' style='border-bottom: solid 2px black;'><font color='#FFFFFF' size='2'><b>Vl. Unit.<br>c/ Desc<b></font></td>";
		texto = texto +  "	<td align='right' style='border-bottom: solid 2px black;'><font color='#FFFFFF' size='2'><b>Tot. Parc.<br>c/ Desc.<b></font></td>";
		texto = texto +  "	<td width='30px' align='center' style='border-bottom: solid 2px black;'><font color='#FFFFFF' size='1'><b>Ipi<b></font></td>";
		texto = texto +  "</tr>";
		
		email.setCabecalho(texto);
		Boolean vez = false;
		String cor = "#FFFFFF";
		
		Double valorTotal = 0.0;
		Double totalDesconto = 0.0;
		Double totalIpi = 0.0;
		
		for(Produto produto : pedido.getProdutos())
		{
			cor = "#FFFFFF";
			if (vez)
				cor = "#D3D3D3";
			vez = !vez;
			itens = itens + "	<tr bgcolor='" + cor + "' height='30px'>";
			itens = itens + "		<td align='center' style='border-top: solid 1px black; border-left: solid 2px black;'><font size='1'>" + produto.getCodigo() + "</font></td>";
			itens = itens + "		<td style='border-top: solid 1px black;' colspan='2'><font size='1'>" + produto.getNome() + "</font></td>";
			itens = itens + "		<td align='center' style='border-top: solid 1px black;'><font size='1'>" + produto.getQuantidade() + "</font></td>";
			itens = itens + "		<td align='right' style='border-top: solid 1px black;'><font size='1'>" + NumberFormat.getCurrencyInstance().format(produto.getValor()) + "</font></td>";
			itens = itens + "		<td align='right' style='border-top: solid 1px black;'><font size='1'>" + pedido.getDesconto()+ " %</font></td>";
			itens = itens + "		<td align='right' style='border-top: solid 1px black;'><font size='1'>" + NumberFormat.getCurrencyInstance().format(produto.getValor()*(1-pedido.getDesconto()/100)) + "</font></td>";
			itens = itens + "		<td align='right' style='border-top: solid 1px black;'><font size='1'>" + NumberFormat.getCurrencyInstance().format((produto.getValor()*produto.getQuantidade()*(1-pedido.getDesconto()/100))) + "</font></td>";
			itens = itens + "		<td width='30px' align='center' style='border-top: solid 1px black; border-right: solid 2px black;'><font size='1'>" + produto.getIpi() + "%</font></td>";
			itens = itens + "	</tr>";
			
			totalDesconto += produto.getValor()*produto.getQuantidade()*(pedido.getDesconto()/100);
			valorTotal += produto.getValor()*produto.getQuantidade()*(1-pedido.getDesconto()/100);
			totalIpi += produto.getValor()*produto.getQuantidade()*(1-pedido.getDesconto()/100)*(produto.getIpi()/100);
		}
		
		rodape = rodape + "<tr><td colspan='9' style='border-left: solid 2px black; border-right: solid 2px black;'>";
		rodape = rodape + "<table width='770px' border='0' cellpadding='0' cellspacing='0'>";

		if (cor == "#FFFFFF")
			cor = "#D3D3D3";
		else
			cor = "#FFFFFF";
		
		rodape = rodape + "	<tr bgcolor='" + cor + "'>";
		rodape = rodape + "		<td  align='right' style='border-top: solid 2px black;'>&nbsp;</td>";
		rodape = rodape + "		<td  align='right' style='border-top: solid 2px black;'><font size='2'><b>Desconto: </b>" + NumberFormat.getCurrencyInstance().format(totalDesconto) + "</font></td>";
		rodape = rodape + "		<td width='270px' align='right' style='border-top: solid 2px black;'><font size='2'><b>Total c/ Desconto: </b> " + NumberFormat.getCurrencyInstance().format(valorTotal) + "</font></td>";
		rodape = rodape + "		<td width='30px' style='border-top: solid 2px black;'>&nbsp;</td>";
		rodape = rodape + "	</tr>";

		if (cor == "#FFFFFF")
			cor = "#D3D3D3";
		else
			cor = "#FFFFFF";
		
		rodape = rodape + "	<tr bgcolor='" + cor + "' height='20px'>";
		rodape = rodape + "		<td align='right' style='border-top: solid 1px black;'><font size='2'><b>IPI:</b>&nbsp;&nbsp;" + NumberFormat.getCurrencyInstance().format(totalIpi) + "</font></td>";
		rodape = rodape + "		<td align='right' style='border-top: solid 1px black;' colspan='2'><font size='2'><b>Total c/ Descontos + Ipi:</b> </font><font size='3'>" + NumberFormat.getCurrencyInstance().format(valorTotal+totalIpi) + "</font></td>";
		rodape = rodape + "		<td align='right' style='border-top: solid 1px black;'>&nbsp;</td>";
		rodape = rodape + "	</tr>";
		
		if (cor == "#FFFFFF")
			cor = "#D3D3D3";
		else
			cor = "#FFFFFF";
		
		rodape = rodape + "	<tr bgcolor='" + cor + "'>";
		rodape = rodape + "		<td align='right' style='border-top: solid 1px black;'><b><font size='2'>Condicao de pagamento:</font></b></td>";
		rodape = rodape + "		<td align='center' style='border-top: solid 1px black;' colspan='3'>" + pedido.getFormapagamentoNome() + "</td>";
		rodape = rodape + "	</tr>";
		
		if (cor == "#FFFFFF")
			cor = "#D3D3D3";
		else
			cor = "#FFFFFF";
		
		rodape = rodape + "	<tr bgcolor='" + cor + "'>";
		rodape = rodape + "		<td align='right' style='border-top: solid 1px black;'><b><font size='2'>Transportadora: </font></b></td>";
		rodape = rodape + "		<td align='center' style='border-top: solid 1px black;' colspan='3'>" + pedido.getTransportadoraNome() + "</td>";
		rodape = rodape + "	</tr>";
		
		if (cor == "#FFFFFF")
			cor = "#D3D3D3";
		else
			cor = "#FFFFFF";
		
		rodape = rodape + "	<tr bgcolor='" + cor + "'>";
		rodape = rodape + "		<td align='right' style='border-top: solid 1px black;'><b><font size='2'>Tipo frete: </font></b></td>";
		rodape = rodape + "		<td align='center' style='border-top: solid 1px black;' colspan='3'>" + pedido.getCliente().getTipoFrete() +  "</td>";
		rodape = rodape + "	</tr>";
		
		if (cor == "#FFFFFF")
			cor = "#D3D3D3";
		else
			cor = "#FFFFFF";
		
		rodape = rodape + "	<tr bgcolor='" + cor + "'>";
		rodape = rodape + "		<td align='right' style='border-top: solid 1px black;'><b><font size='2'>Representante: </font></b></td>";
		rodape = rodape + "		<td align='center' style='border-top: solid 1px black;' colspan='3'>" + pedido.getRepresentante().getCodigo() + " - " + pedido.getRepresentante().getNome() +  "</td>";
		rodape = rodape + "	</tr>";
		

		if (cor == "#FFFFFF")
			cor = "#D3D3D3";
		else
			cor = "#FFFFFF";
		
		rodape = rodape + "	<tr bgcolor='" + cor + "'>";
		rodape = rodape + "		<td align='right' style='border-top: solid 1px black;'><b><font size='2'>Observacao: </font></b></td>";
		rodape = rodape + "		<td align='left' style='border-top: solid 1px black;' colspan='3'>&nbsp;" + pedido.getObservacao() + "</td>";
		rodape = rodape + "	</tr>";
		
		rodape = rodape + "</table>";
		
		rodape = rodape + "</td></tr>";
		rodape = rodape + "</table>";
		rodape = rodape + "</td>";
		rodape = rodape + "</tr>";
		rodape = rodape + "</table>";
		rodape = rodape + "</body>";
		rodape = rodape + "</html>";

		rodape = rodape +  "<table border='0' align='center' cellpadding='0' cellspacing='0' width='770px'>";
		rodape = rodape +  "<tr>";
		rodape = rodape +  	"<td align='center' colspan='3'><b> Valores e condi&ccedil;&otilde;es sujeitos a altera&ccedil;&atilde;o no momento do faturamento.</b></td>";
		rodape = rodape +  "</tr>";
		rodape = rodape + "</table>";
		
		email.setCorpo(itens+rodape);
		
		try{
			msg.setFrom(new InternetAddress("admin@dican.com.br"));
	        InternetAddress[] toAddresses = { new InternetAddress(pedido.getRepresentante().getEmail()),new InternetAddress(pedido.getRepresentante().getOrgEmail()),new InternetAddress("jean@dican.com.br") };
	        msg.setRecipients(Message.RecipientType.TO, toAddresses);
	        msg.setSubject(email.getAssunto());
	        msg.setSentDate(new Date());
	        msg.setContent(email.getCabecalho()+email.getCorpo(),"text/html; charset=utf-8");
		    Transport.send(msg);
		}catch (AddressException e){
			try{
			msg.setFrom(new InternetAddress("admin@dican.com.br"));
	        InternetAddress[] toAddresses = { new InternetAddress("pedidos@dican.com.br") };
	        msg.setRecipients(Message.RecipientType.TO, toAddresses);
	        msg.setSubject(email.getAssunto());
	        msg.setSentDate(new Date());
	        msg.setContent(email.getCabecalho()+email.getCorpo()+"Erro no endereco "+e,"text/html; charset=utf-8");
		    Transport.send(msg);
			}catch (Exception ee){
			    System.out.println("Erro no envio para Jean "+ee);
			}
		}catch (Exception e){
		    System.out.println("Erro no envio "+e);
		}
		String url = "pedidoFinalizado.jsp?numeroPedido="+pedido.getNumero();
		sessao.setAttribute("pedidoImpressao", email.getCabecalho()+email.getCorpo());
		sessao.removeAttribute("pedido");
		sessao.removeAttribute("produtos");
		sessao.removeAttribute("listaProd");
		response.sendRedirect(url);
	}
}
